package com.teamwings.ctrls;

import java.util.Arrays;
import java.util.List;

/**
 * 本类用于数据库建表、修改表的列
 * @author
 */
public class Field implements IField {
    // 字符类型
    private final static List<String> StringType = Arrays.asList(
            "VARCHAR", "CHAR", "CHARACTER", "CHARACTER VARYING",
            "VARCHAR2", "NVARCHAR", "NVARCHAR2", "TEXT", "CLOB"
    );
    private FormComponent component;

    public Field(FormComponent component) {
        this.component = component;
    }

    @Override
    public String getFieldName() {
        return this.component.getModel().toUpperCase();
    }

    /**
     * 获取数据类型
     * 如果数据库有字段类型冲突，在这里做兼容
     * @return
     */
    @Override
    public String getFieldType() {
        return this.component.getFieldType();
    }

    /**
     * 从maxLength中获取
     * @return
     */
    @Override
    public String getFieldTypeValue() {
        String typeValue = component.getMaxLength();
        if (typeValue == null || typeValue.equals("")) {
            typeValue = component.getFieldDefaultLength();
        }
        if (typeValue.equals("")) {
            return "";
        } else {
            return "(" + typeValue + ")";
        }
    }

    /**
     * TODO
     * 从rules: [{ required: true }] 中获取，rules或required有可能不存在
     * @return
     */
    @Override
    public Boolean getIsAllowNull() {
        return true;
    }

    /**
     * 标明是否需要单引号
     * @return
     */
    @Override
    public boolean withQuote() {
        return Field.StringType.contains(this.getFieldType());
    }

    /**
     * 直接帮助输出内容
     * @param val
     * @return
     */
    @Override
    public String withQuote(String val) {
        if (this.withQuote()) {
            return "'" + val + "'";
        } else {
            return val;
        }
    }


    //String fieldName;
    //String fieldType;
    //String fieldTypeValue = "";
    //Boolean isAllowNull = true;
    //String statement;
    // 判断是否修改表单列的类型
    // TODO
    //
    //public Field() {
    //
    //}
    //
    //public Field(String fieldType, String fieldTypeValue) {
    //    this.fieldType = fieldType;
    //    this.fieldTypeValue = fieldTypeValue;
    //}
    //
    //// 字符类型
    //final static List<String> StringType = Arrays.asList(
    //        "VARCHAR", "CHAR", "CHARACTER", "CHARACTER VARYING",
    //        "VARCHAR2", "NVARCHAR", "NVARCHAR2", "TEXT", "CLOB"
    //);
    //
    ///**
    // *
    // * @param fieldType
    // */
    //public void setFieldType(String fieldType) {
    //    if (fieldType != null) {
    //        this.fieldType = fieldType;
    //    }
    //}
    //
    ///**
    // * 设置 类型长度字符串值
    // * TODO 暂时只对几种数据类型使用
    // * @param length
    // */
    //public void setFieldTypeValue(Integer length) {
    //    // 单位(byte, char)可以忽略，如果忽略时，CHAR字段类型默认数据类型是char
    //    if (length != null && StringType.contains(this.fieldType)) {
    //        fieldTypeValue = "(" + length + ")";
    //    } else {
    //        fieldTypeValue = "";
    //    }
    //}
    //
    //public void setFieldTypeValue(String val) {
    //    fieldTypeValue = val;
    //}
}
